小编典典

如何使用我喜欢的差异工具/查看器查看“git diff”输出?

all

当我输入 时git diff,我想使用我选择的视觉差异工具(Windows 上的 SourceGear “diffmerge”)查看输出。我如何配置
git 来做到这一点?


阅读 207

收藏
2022-03-02

共1个答案

小编典典

从 Git1.6.3 开始,您可以使用 git difftool 脚本
:请参阅下面的答案


也许这篇文章会对你有所帮助。以下是最好的部分:

指定外部差异工具有两种不同的方法。

第一个是您使用的方法,通过设置 GIT_EXTERNAL_DIFF 变量。但是,该变量应该指向可执行文件的完整路径。此外,由
GIT_EXTERNAL_DIFF 指定的可执行文件将使用一组固定的 7 个参数调用:

path old-file old-hex old-mode new-file new-hex new-mode

由于大多数 diff 工具将需要不同的参数顺序(并且仅需要一些),因此您很可能必须指定一个包装脚本,而后者又会调用真正的 diff 工具。

我更喜欢的第二种方法是 通过 “git config” 配置外部差异工具 。这是我所做的:

1)创建一个包装脚本“git-diff-wrapper.sh”,其中包含类似

-->8-(snip)--
#!/bin/sh

# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode

"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--

如您所见,只有第二个(“旧文件”)和第五个(“新文件”)参数将传递给 diff 工具。

2) 类型

$ git config --global diff.external <path_to_wrapper_script>

在命令提示符处,替换为“git-diff-wrapper.sh”的路径,因此您的 ~/.gitconfig 包含

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

确保使用正确的语法来指定包装脚本和差异工具的路径,即使用正斜杠而不是反斜杠。就我而言,我有

[diff]
    external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"

在 .gitconfig 和

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

在包装脚本中。注意尾随的“猫”!

(我想 ‘ | cat‘ 仅适用于某些可能无法返回正确或一致的返回状态的程序。如果您的差异工具具有明确的返回状态,您可能想尝试不使用尾随猫)

Diomidis Spinellis在评论中补充道:

cat命令是必需的,因为diff(1)如果文件不同,默认情况下会以错误代码退出。
Git 期望外部 diff 程序仅在发生实际错误时以错误代码退出,例如内存不足。
通过管道输出gitcat非零错误代码被屏蔽。
更有效的是,程序可以只exit使用 0 的参数运行。)


那(上面引用的文章)是 通过配置文件 (而不是通过环境变量)定义的外部工具的理论。
在实践中(仍然是外部工具的配置文件定义),您可以参考:

2022-03-02